package com.naiterui.ehp.bp.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 患者钱包账户实体
 * @author Amber
 * @since 1.0.0
 */
@Entity
@Table(name = "patient_account")
public class PatientAccount implements Serializable {
    /**
     * 字段或域定义：<code>serialVersionUID</code>
     */
    private static final long serialVersionUID = -8601524349414307247L;
    /**
     * 主键：<code>id</code>
     */
    private Long id;
    /**
     * 患者id：<code>patientId</code>
     */
    private Long patientId;
    /**
     * 主账户余额：<code>mainAccBal</code>
     */
    private Integer mainAccBal;
    /**
     * 副账户余额：<code>subAccBal</code>
     */
    private Integer subAccBal;
    /**
     * 总余额：<code>generalAccBal</code>
     */
    private Integer generalAccBal;
    /**
     * 创建时间：<code>createdAt</code>
     */
    private Date createdAt;
    /**
     * 创建人：<code>createdBy</code>
     */
    private String createdBy;
    /**
     * 修改时间：<code>changedAt</code>
     */
    private Date changedAt;
    /**
     * 修改人：<code>changedBy</code>
     */
    private String changedBy;

    public PatientAccount() {
    }

    public PatientAccount(Long patientId) {
        this.patientId = patientId;
        this.mainAccBal = 0;
        this.subAccBal = 0;
        this.generalAccBal = 0;
        this.createdAt = new Date();
        this.createdBy = "system";
        this.changedAt = new Date();
        this.changedBy = "system";
    }

    /**
     * @return Long 取得域 id 的方法。
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return this.id;
    }

    /**
     * @param id 对域 id 的设置方法.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return Long 取得域 patientId 的方法。
     */
    @Column(name = "patient_id", nullable = false)
    public Long getPatientId() {
        return this.patientId;
    }

    /**
     * @param patientId 对域 patientId 的设置方法.
     */
    public void setPatientId(Long patientId) {
        this.patientId = patientId;
    }

    /**
     * @return Integer 取得域 mainAccBal 的方法。
     */
    @Column(name = "main_acc_bal", nullable = false)
    public Integer getMainAccBal() {
        return this.mainAccBal;
    }

    /**
     * @param mainAccBal 对域 mainAccBal 的设置方法.
     */
    public void setMainAccBal(Integer mainAccBal) {
        this.mainAccBal = mainAccBal;
    }

    /**
     * @return Integer 取得域 subAccBal 的方法。
     */
    @Column(name = "sub_acc_bal", nullable = false)
    public Integer getSubAccBal() {
        return this.subAccBal;
    }

    /**
     * @param subAccBal 对域 subAccBal 的设置方法.
     */
    public void setSubAccBal(Integer subAccBal) {
        this.subAccBal = subAccBal;
    }

    /**
     * @return Integer 取得域 generalAccBal 的方法。
     */
    @Column(name = "general_acc_bal", nullable = false)
    public Integer getGeneralAccBal() {
        return this.generalAccBal;
    }

    /**
     * @param generalAccBal 对域 generalAccBal 的设置方法.
     */
    public void setGeneralAccBal(Integer generalAccBal) {
        this.generalAccBal = generalAccBal;
    }

    /**
     * @return Date 取得域 createdAt 的方法。
     */
    @Column(name = "created_at")
    public Date getCreatedAt() {
        return this.createdAt;
    }

    /**
     * @param createdAt 对域 createdAt 的设置方法.
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * @return String 取得域 createdBy 的方法。
     */
    @Column(name = "created_by")
    public String getCreatedBy() {
        return this.createdBy;
    }

    /**
     * @param createdBy 对域 createdBy 的设置方法.
     */
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    /**
     * @return Date 取得域 changedAt 的方法。
     */
    @Column(name = "changed_at")
    public Date getChangedAt() {
        return this.changedAt;
    }

    /**
     * @param changedAt 对域 changedAt 的设置方法.
     */
    public void setChangedAt(Date changedAt) {
        this.changedAt = changedAt;
    }

    /**
     * @return String 取得域 changedBy 的方法。
     */
    @Column(name = "changed_by")
    public String getChangedBy() {
        return this.changedBy;
    }

    /**
     * @param changedBy 对域 changedBy 的设置方法.
     */
    public void setChangedBy(String changedBy) {
        this.changedBy = changedBy;
    }

}
